package com.vegetable.common.utils;

import com.vegetable.modules.entity.sys.SysMessageEntity;
import com.vegetable.modules.service.sys.SysMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.List;

/**
 * 消息工具类
 *
 * @author Qoder
 */
@Component
public class MessageUtils {

    @Autowired
    private SysMessageService sysMessageService;

    private static MessageUtils messageUtils;

    @PostConstruct
    public void init() {
        messageUtils = this;
        messageUtils.sysMessageService = this.sysMessageService;
    }

    /**
     * 发送消息给指定用户
     *
     * @param userId  用户ID
     * @param title   消息标题
     * @param content 消息内容
     * @param type    消息类型 1:系统消息 2:任务提醒 3:通知公告
     * @param important 是否重要 0:普通 1:重要
     * @return 是否发送成功
     */
    public static boolean sendMessage(Long userId, String title, String content, Integer type, Integer important) {
        SysMessageEntity message = new SysMessageEntity();
        message.setReceiverUserId(userId);
        message.setTitle(title);
        message.setContent(content);
        message.setType(type);
        message.setImportant(important);
        return messageUtils.sysMessageService.sendMessage(message);
    }

    /**
     * 发送消息给指定用户(普通消息)
     *
     * @param userId  用户ID
     * @param title   消息标题
     * @param content 消息内容
     * @return 是否发送成功
     */
    public static boolean sendMessage(Long userId, String title, String content) {
        return sendMessage(userId, title, content, 1, 0);
    }

    /**
     * 发送带跳转链接的消息给指定用户
     *
     * @param userId  用户ID
     * @param title   消息标题
     * @param content 消息内容
     * @param redirectUrl 跳转链接
     * @return 是否发送成功
     */
    public static boolean sendMessage(Long userId, String title, String content, String redirectUrl) {
        return sendMessage(userId, title, content, redirectUrl, 1, 0);
    }

    /**
     * 发送带跳转链接的消息给指定用户
     *
     * @param userId  用户ID
     * @param title   消息标题
     * @param content 消息内容
     * @param redirectUrl 跳转链接
     * @param type    消息类型 1:系统消息 2:任务提醒 3:通知公告
     * @param important 是否重要 0:普通 1:重要
     * @return 是否发送成功
     */
    public static boolean sendMessage(Long userId, String title, String content, String redirectUrl, Integer type, Integer important) {
        SysMessageEntity message = new SysMessageEntity();
        message.setReceiverUserId(userId);
        message.setTitle(title);
        message.setContent(content);
        message.setType(type);
        message.setImportant(important);
        message.setRedirectUrl(redirectUrl);
        return messageUtils.sysMessageService.sendMessage(message);
    }

    /**
     * 批量发送消息
     *
     * @param messages 消息列表
     * @return 是否发送成功
     */
    public static boolean sendBatchMessage(List<SysMessageEntity> messages) {
        return messageUtils.sysMessageService.sendBatchMessage(messages);
    }
}